﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Configuracion
{
    public class dbo_CargaDatos
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores

        public dbo_CargaDatos(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion
        
        #region INSERT
        
        public Respuesta Articulo_Insert
        (            
            string RFC,
            int Id_Grupo,
            string ClaveArticulo,
            string NombreArticulo,
            string DescripcionArticulo,
            string ProductoServicio,
            string CodigoBarrasArticulo,
            string MarcarArticulo,
            string GrupoProdArticulo,
            string SubGrupoProdArticulo,
            string LineaProdArticulo,
            string ColorArticulo,
            string TallaArticulo,
            string UM_Articulo,
            string ArticuloDisponibleVenta,
            string ArticuloDescontinuado,
            string MonedaArticulo,
            double PrecioListaArticulo,
            double PrecioMinArticulo,
            double CostoEstandarArticulo,
            double TasaImpuestoArticulo,
            bool IsValid
        )
        {
            string Query = @"

                INSERT INTO dbo_Temp_CargaDatos_Articulo
                (
                    Id_CargaDatos_Articulo,
                    RFC,
                    Id_Grupo,
                    ClaveArticulo,
                    NombreArticulo,
                    DescripcionArticulo,
                    ProductoServicio,
                    CodigoBarrasArticulo,
                    MarcarArticulo,
                    GrupoProdArticulo,
                    SubGrupoProdArticulo,
                    LineaProdArticulo,
                    ColorArticulo,
                    TallaArticulo,
                    UM_Articulo,
                    ArticuloDisponibleVenta,
                    ArticuloDescontinuado,
                    MonedaArticulo,
                    PrecioListaArticulo,
                    PrecioMinArticulo,
                    CostoEstandarArticulo,
                    TasaImpuestoArticulo,
                    IsValid
                )
                VALUES
                (
                    IIF(DCount('*', 'dbo_Temp_CargaDatos_Articulo') = 0, 1, DMax('Id_CargaDatos_Articulo', 'dbo_Temp_CargaDatos_Articulo') + 1),
                    @RFC,
                    @Id_Grupo,
                    @ClaveArticulo,
                    @NombreArticulo,
                    @DescripcionArticulo,
                    @ProductoServicio,
                    @CodigoBarrasArticulo,
                    @MarcarArticulo,
                    @GrupoProdArticulo,
                    @SubGrupoProdArticulo,
                    @LineaProdArticulo,
                    @ColorArticulo,
                    @TallaArticulo,
                    @UM_Articulo,
                    @ArticuloDisponibleVenta,
                    @ArticuloDescontinuado,
                    @MonedaArticulo,
                    @PrecioListaArticulo,
                    @PrecioMinArticulo,
                    @CostoEstandarArticulo,
                    @TasaImpuestoArticulo,
                    @IsValid
                )
            ";

            OleDbCommand command = new OleDbCommand(Query);
            
            command.Parameters.AddWithValue("@RFC",RFC);
            command.Parameters.AddWithValue("@Id_Grupo",Id_Grupo);
            command.Parameters.AddWithValue("@ClaveArticulo",ClaveArticulo);
            command.Parameters.AddWithValue("@NombreArticulo", NombreArticulo.Replace("'", "''"));
            command.Parameters.AddWithValue("@DescripcionArticulo", DescripcionArticulo.Replace("'", "''"));
            command.Parameters.AddWithValue("@ProductoServicio",ProductoServicio);
            command.Parameters.AddWithValue("@CodigoBarrasArticulo",CodigoBarrasArticulo);
            command.Parameters.AddWithValue("@MarcarArticulo",MarcarArticulo);
            command.Parameters.AddWithValue("@GrupoProdArticulo",GrupoProdArticulo);
            command.Parameters.AddWithValue("@SubGrupoProdArticulo",SubGrupoProdArticulo);
            command.Parameters.AddWithValue("@LineaProdArticulo",LineaProdArticulo);
            command.Parameters.AddWithValue("@ColorArticulo",ColorArticulo);
            command.Parameters.AddWithValue("@TallaArticulo",TallaArticulo);
            command.Parameters.AddWithValue("@UM_Articulo",UM_Articulo);
            command.Parameters.AddWithValue("@ArticuloDisponibleVenta",ArticuloDisponibleVenta);
            command.Parameters.AddWithValue("@ArticuloDescontinuado",ArticuloDescontinuado);
            command.Parameters.AddWithValue("@MonedaArticulo",MonedaArticulo);
            command.Parameters.AddWithValue("@PrecioListaArticulo",PrecioListaArticulo);
            command.Parameters.AddWithValue("@PrecioMinArticulo",PrecioMinArticulo);
            command.Parameters.AddWithValue("@CostoEstandarArticulo",CostoEstandarArticulo);
            command.Parameters.AddWithValue("@TasaImpuestoArticulo",TasaImpuestoArticulo);
            command.Parameters.AddWithValue("@IsValid", IsValid);

            return SrvDB.ExecuteQuery_Insert(command);
        }

        public Respuesta Cliente_Insert
        (
            string RFC,
            int Id_Grupo,
            string RazonSocial_Cliente,
            string RFC_Cliente,
            string NombreComercial_Cliente,
            string Grupo_Cliente,
            string Dir_Cliente_Calle,
            string Dir_Cliente_NumExt,
            string Dir_Cliente_NumInt,
            string Dir_Cliente_EntreCalle1,
            string Dir_Cliente_EntreCalle2,
            string Dir_Cliente_Colonia,
            string Dir_Cliente_Referencia,
            string Dir_Cliente_Poblacion,
            string Dir_Cliente_CP,
            string Dir_Cliente_Pais,
            string Dir_Cliente_Estado,
            string Dir_Cliente_Delegacion,
            bool IsValid

        )
        {
            string Query = @"

                INSERT INTO dbo_Temp_CargaDatos_Cliente
                (
                    Id_CargaDatos_Cliente,
                    RFC,
                    Id_Grupo,
                    RazonSocial_Cliente,
                    RFC_Cliente,
                    NombreComercial_Cliente,
                    Grupo_Cliente,
                    Dir_Cliente_Calle,
                    Dir_Cliente_NumExt,
                    Dir_Cliente_NumInt,
                    Dir_Cliente_EntreCalle1,
                    Dir_Cliente_EntreCalle2,
                    Dir_Cliente_Colonia,
                    Dir_Cliente_Referencia,
                    Dir_Cliente_Poblacion,
                    Dir_Cliente_CP,
                    Dir_Cliente_Pais,
                    Dir_Cliente_Estado,
                    Dir_Cliente_Delegacion,
                    IsValid
                )
                VALUES
                (
                    IIF(DCount('*', 'dbo_Temp_CargaDatos_Cliente') = 0, 1, DMax('Id_CargaDatos_Cliente', 'dbo_Temp_CargaDatos_Cliente') + 1),
                    @RFC,
                    @Id_Grupo,
                    @RazonSocial_Cliente,
                    @RFC_Cliente,
                    @NombreComercial_Cliente,
                    @Grupo_Cliente,
                    @Dir_Cliente_Calle,
                    @Dir_Cliente_NumExt,
                    @Dir_Cliente_NumInt,
                    @Dir_Cliente_EntreCalle1,
                    @Dir_Cliente_EntreCalle2,
                    @Dir_Cliente_Colonia,
                    @Dir_Cliente_Referencia,
                    @Dir_Cliente_Poblacion,
                    @Dir_Cliente_CP,
                    @Dir_Cliente_Pais,
                    @Dir_Cliente_Estado,
                    @Dir_Cliente_Delegacion,
                    @IsValid
                )
            ";

            OleDbCommand command = new OleDbCommand(Query);

            command.Parameters.AddWithValue("@RFC", RFC);
            command.Parameters.AddWithValue("@Id_Grupo", Id_Grupo);
            command.Parameters.AddWithValue("@RazonSocial_Cliente", RazonSocial_Cliente.Replace("'", "''"));
            command.Parameters.AddWithValue("@RFC_Cliente", RFC_Cliente);
            command.Parameters.AddWithValue("@NombreComercial_Cliente", NombreComercial_Cliente.Replace("'", "''"));
            command.Parameters.AddWithValue("@Grupo_Cliente", Grupo_Cliente);
            command.Parameters.AddWithValue("@Dir_Cliente_Calle", Dir_Cliente_Calle.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Cliente_NumExt", Dir_Cliente_NumExt);
            command.Parameters.AddWithValue("@Dir_Cliente_NumInt", Dir_Cliente_NumInt);
            command.Parameters.AddWithValue("@Dir_Cliente_EntreCalle1", Dir_Cliente_EntreCalle1.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Cliente_EntreCalle2", Dir_Cliente_EntreCalle2.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Cliente_Colonia", Dir_Cliente_Colonia.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Cliente_Referencia", Dir_Cliente_Referencia.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Cliente_Poblacion", Dir_Cliente_Poblacion.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Cliente_CP", Dir_Cliente_CP);
            command.Parameters.AddWithValue("@Dir_Cliente_Pais", Dir_Cliente_Pais.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Cliente_Estado", Dir_Cliente_Estado.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Cliente_Delegacion", Dir_Cliente_Delegacion.Replace("'", "''"));
            command.Parameters.AddWithValue("@IsValid", IsValid);

            return SrvDB.ExecuteQuery_Insert(command);
        }

        public Respuesta Proveedor_Insert
        (
            string RFC,
            int Id_Grupo,
            string RazonSocial_Prov,
            string RFC_Prov,
            string NombreComercial_Prov,
            string Grupo_Prov,
            string Dir_Prov_Calle,
            string Dir_Prov_NumExt,
            string Dir_Prov_NumInt,
            string Dir_Prov_EntreCalle1,
            string Dir_Prov_EntreCalle2,
            string Dir_Prov_Colonia,
            string Dir_Prov_Referencia,
            string Dir_Prov_Poblacion,
            string Dir_Prov_CP,
            string Dir_Prov_Pais,
            string Dir_Prov_Estado,
            string Dir_Prov_Delegacion,
            bool IsValid
        )
        {
            string Query = @"

                INSERT INTO dbo_Temp_CargaDatos_Proveedor
                (
                    Id_CargaDatos_Proveedor,
                    RFC,
                    Id_Grupo,
                    RazonSocial_Prov,
                    RFC_Prov,
                    NombreComercial_Prov,
                    Grupo_Prov,
                    Dir_Prov_Calle,
                    Dir_Prov_NumExt,
                    Dir_Prov_NumInt,
                    Dir_Prov_EntreCalle1,
                    Dir_Prov_EntreCalle2,
                    Dir_Prov_Colonia,
                    Dir_Prov_Referencia,
                    Dir_Prov_Poblacion,
                    Dir_Prov_CP,
                    Dir_Prov_Pais,
                    Dir_Prov_Estado,
                    Dir_Prov_Delegacion,
                    IsValid
                )
                VALUES
                (
                    IIF(DCount('*', 'dbo_Temp_CargaDatos_Proveedor') = 0, 1, DMax('Id_CargaDatos_Proveedor', 'dbo_Temp_CargaDatos_Proveedor') + 1),
                    @RFC,
                    @Id_Grupo,
                    @RazonSocial_Prov,
                    @RFC_Prov,
                    @NombreComercial_Prov,
                    @Grupo_Prov,
                    @Dir_Prov_Calle,
                    @Dir_Prov_NumExt,
                    @Dir_Prov_NumInt,
                    @Dir_Prov_EntreCalle1,
                    @Dir_Prov_EntreCalle2,
                    @Dir_Prov_Colonia,
                    @Dir_Prov_Referencia,
                    @Dir_Prov_Poblacion,
                    @Dir_Prov_CP,
                    @Dir_Prov_Pais,
                    @Dir_Prov_Estado,
                    @Dir_Prov_Delegacion,
                    @IsValid
                )
            ";

            OleDbCommand command = new OleDbCommand(Query);

            command.Parameters.AddWithValue("@RFC", RFC);
            command.Parameters.AddWithValue("@Id_Grupo", Id_Grupo);
            command.Parameters.AddWithValue("@RazonSocial_Prov", RazonSocial_Prov.Replace("'", "''"));
            command.Parameters.AddWithValue("@RFC_Prov", RFC_Prov);
            command.Parameters.AddWithValue("@NombreComercial_Prov", NombreComercial_Prov.Replace("'", "''"));
            command.Parameters.AddWithValue("@Grupo_Prov", Grupo_Prov);
            command.Parameters.AddWithValue("@Dir_Prov_Calle", Dir_Prov_Calle.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Prov_NumExt", Dir_Prov_NumExt);
            command.Parameters.AddWithValue("@Dir_Prov_NumInt", Dir_Prov_NumInt);
            command.Parameters.AddWithValue("@Dir_Prov_EntreCalle1", Dir_Prov_EntreCalle1.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Prov_EntreCalle2", Dir_Prov_EntreCalle2.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Prov_Colonia", Dir_Prov_Colonia.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Prov_Referencia", Dir_Prov_Referencia.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Prov_Poblacion", Dir_Prov_Poblacion.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Prov_CP", Dir_Prov_CP);
            command.Parameters.AddWithValue("@Dir_Prov_Pais", Dir_Prov_Pais.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Prov_Estado", Dir_Prov_Estado.Replace("'", "''"));
            command.Parameters.AddWithValue("@Dir_Prov_Delegacion", Dir_Prov_Delegacion.Replace("'", "''"));
            command.Parameters.AddWithValue("@IsValid", IsValid);

            return SrvDB.ExecuteQuery_Insert(command);
        }

        #endregion

        #region UPDATE

        #endregion

        #region SELECT

        public int Articulo_NextIdGrupo()
        {
            return Int32.Parse(SrvDB.ExecuteQuery_Get("SELECT IIF(DCount('*', 'dbo_Temp_CargaDatos_Articulo') = 0, 1, DMax('Id_Grupo', 'dbo_Temp_CargaDatos_Articulo') + 1)").Rows[0][0].ToString());
        }

        public int Cliente_NextIdGrupo()
        {
            return Int32.Parse(SrvDB.ExecuteQuery_Get("SELECT IIF(DCount('*', 'dbo_Temp_CargaDatos_Cliente') = 0, 1, DMax('Id_Grupo', 'dbo_Temp_CargaDatos_Cliente') + 1)").Rows[0][0].ToString());
        }

        public int Proveedor_NextIdGrupo()
        {
            return Int32.Parse(SrvDB.ExecuteQuery_Get("SELECT IIF(DCount('*', 'dbo_Temp_CargaDatos_Proveedor') = 0, 1, DMax('Id_Grupo', 'dbo_Temp_CargaDatos_Proveedor') + 1)").Rows[0][0].ToString());
        }

        #endregion

        #region DELETE

        public void DeleteTemporales()
        {
            string Query = @"DELETE FROM dbo_Temp_CargaDatos_Articulo WHERE RFC = '@@RFC'".Replace("@@RFC", this._RFC);
            SrvDB.ExecuteQuery_Delete(Query);

            string Query2 = @"DELETE FROM dbo_Temp_CargaDatos_Cliente WHERE RFC = '@@RFC'".Replace("@@RFC", this._RFC);
            SrvDB.ExecuteQuery_Delete(Query2);

            string Query3 = @"DELETE FROM dbo_Temp_CargaDatos_Proveedor WHERE RFC = '@@RFC'".Replace("@@RFC", this._RFC);
            SrvDB.ExecuteQuery_Delete(Query3);
        }

        #endregion
    }
}
